package com.shujia.day05;

public class Code11ExtendDemo {
    public static void main(String[] args) {

        /*
            对于猫和狗来说，都存在有一些共有的成员方法和成员变量 这时可以将这些特点进行提取，
                包装成一个共同的父类
            继承方式：
                通过extends关键字可以实现类与类的继承
                class 子类名 extends 父类名 {}

            继承的好处：
                ① 提高了代码的复用性 多个类相同的成员可以放到同一个类中
                ② 提高了代码的维护性 如果功能的代码需要修改，修改父类中的成员即可
                ③ 让类与类之间产生了关系，是多态的前提 其实这也是继承的一个弊端：类的耦合性很强
                     什么是耦合性：表示代码和代码之间的关联程度
                        代码和代码之间关联度高，带来的问题有：
                            如果对其中一个代码进行修改，那么会影响其他相关的一些代码，导致整体的开发量较大
                            在排查问题时，可能会牵连到其他代码，不好确定问题的根源
                        同时耦合性也提高了代码开发的效率

             继承中的方法重写：
                对于继承得到的成员方法，如果不满足要求，那么可以重新定义一个同名的方法，方法内部的代码块可以和父类中的不一致
                对于重写的成员 可以添加一个 @Override 进行标记
                对于子类重写的方法，当对象调用方法时，根据就近原则，选择使用自身的方法进行调用


             Java中为什么不支持多继承？
                当 A类中的某个方法被 B和C同时继承并且重写后，如果D再同时继承了B和C
                那么对于继承后的方法，就产生了冲突，所以不支持多继承


             Java中虽然不支持多继承，但是支持多层继承，形成一个继承体系


             Java继承需要注意哪些事项：
                1.子类只能继承父类中非私有的成员
                2.父类中的构造方法，在子类构建对象时，会被调用，同时初始化子类必须先初始化父类
                3.子类无法继承父类的构造方法，只能去调用
                4.对于父类的构造方法可以通过super()进行调用，并且要求在子类构造方法中，第一个执行
                5.对于子类继承父类，需要父类中包含有无参构造，如果没有无参构造，
                        那么需要在子类的构造方法中手动使用super(参数)来调用父类的有参构造方法，否则会报错
                6.不能因为某个类中存在有部分需要的功能就直接进行继承
                        那什么时候可以继承？  =>  符合 is a 这样的一个语法就可以使用继承关系

                7.对于变量的调用，是依照就近原则来使用的


             Java中方法的重写和重载的区别：
                重载：方法名相同 参数不同 和返回值无关
                重写：方法名 参数 返回值 要求一致 但是执行逻辑最好不一样

         */
        Cat cat = new Cat();
//        Dog dog = new Dog();

//        cat.run();  // run 在父类中私有后，获取不到
//        dog.run();

//        cat.say();
//        dog.say();

//        cat.age

        cat.eat();

        cat.show();
        System.out.println(cat.weight);

    }
}
